/***************************************************************************
创建者：华磊
 开始时间：               : 2020.1１.２４
 copyright            : (C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   io窗口程序
*                                                                         *
 ***************************************************************************/
#ifndef SYSTEMSTATUSDELEGATE_H
#define SYSTEMSTATUSDELEGATE_H

#include <QObject>
#include "systemstatusdelegate_global.h"
#include "../systemstatus/systemstatus.h"
#include "../CommunicateDelegate/moveoperation.h"


class CommunicateNormalDelegate;



class SYSTEMSTATUSDELEGATESHARED_EXPORT SystemStatusDelegate : public QObject
{

    Q_OBJECT
public:
    SystemStatusDelegate(CommunicateNormalDelegate *communicateNormalDelegateIn,
                         SystemStatus *systemStatusIn, GlobalData *globalDataIn,
                         GlobalData *ioDataIn, MoveOperation *moveOperationIn,
                         QObject* parent=0);
    ~SystemStatusDelegate();

    /**
     * @brief moveToPoint                       PR 移动到点 移动类型\点 数组下标
     */
    void moveToPoint(int moveType , int pointIndex);

public slots:
    void initDataSlot();

    void aiStatusSearchSlot();
    void aiSetNoteSlot(int index,QString text);

    void aoStatusSearchSlot();
    void aoSetNoteSlot(int index,QString text);
    void setAoValueSlot(int index,float aoValue);

    void diStatusSearchSlot();
    void diSetNoteSlot(int index,QString text);

    void doStatusSearchSlot();
    void doSetNoteSlot(int index,QString text);
    void setDoValueSlot(int index,bool value);

    void generalStatusSearchSlot();

    void siStatusSearchSlot();
    void siSetNoteSlot(int index,QString text);

    void soStatusSearchSlot();
    void soSetNoteSlot(int index,QString text);
    void setSoValueSlot(int index,bool value);

    void timerStatusSearchSlot();
    void beginTimerSlot(int index);
    void ceaseTimerSlot(int index);
    void resetTimerSlot(int index);

    void registerStatusSearchSlot();
    void setRegisterValueSlot(int index,float value);
    void clearAllRegisterSlot();

    void globalRegisterStatusSearchSlot();
    void setGlobalRegisterValueSlot(int index,float value);
    void clearAllGlobalRegisterSlot();

    void palletRegisterStatusSearchSlot();
    void setPalletRegisterValueSlot(int index,float row,float col,float layer);
    void clearAllPalletRegisterSlot();

    void pointRegisterStatusFlagSlot();
    void pointRegisterStatusSearchSlot();
    void jMoveSlot(int index);
    void lMoveSlot(int index);
    void stopMoveSlot();
    /**
     * @brief recordPointSlot                   PR 载入点
     * @param index
     */
    void recordPointSlot(int index);
    /**
     * @brief changePointTypeToJointSlot        PR 转换 关节点
     * @param index
     */
    void changePointTypeToJointSlot(int index);
    /**
     * @brief changePointTypeToCartesianSlot    PR 转换 世界点
     * @param index
     */
    void changePointTypeToCartesianSlot(int index);
    /**
     * @brief recvPointResultSlot               PR 接收来自comm的转换结果
     * @param recvPoint
     */
    void recvPrPointResultSlot(int index ,PointPro recvPoint);

    //供定时器middle使用
    void updateViewAndData();

    /**
     * @brief ftpPutFileSlot                    io配置文件Robot1Data/config/iomap.xml 修改完成后上传至控制器
     * @param serverPath                        FTP服务器路径
     * @param clientPath                        客户端文件路径
     */
    void ftpPutFileSlot(const QString &fileName, const QString &Path);

signals:
    /**
     * @brief msgBoxSignal                      通知 打开消息框
     */
    void msgBoxSignal(int type,QString title,QString text);

    void setDoSignal(int number,bool value);
    void setSoSignal(int number,bool value);
    void setAoSignal(int number,float value);

    void setGrSignal(int number,float value);
    void setGrClearSignal();

    void setRSignal(int number,float value);
    void setRClearSignal();

    //
    /**
     * @brief setPrSignal                       PR 载入点 信号
     * @param number                            点 数组 下标
     * @param tmpPoint                          点数据
     */
    void setPrSignal(int number,PointPro tmpPoint);

//    /**
//     * @brief movePrSignal                      PR 移动到点信号 信号
//     * @param point
//     */
//    void movePrSignal(MoveParameter point);
//    /**
//     * @brief stopMovePrSignal                  PR 停止移动 信号
//     */
//    void stopMovePrSignal();

    /**
     * @brief changePoint                       PR 点转换 信号
     * @param point
     */
    void changePrPoint(int index,PointPro point);

    //
    void setPlSignal(int number,float row,float col,float layer);
    void setPlClearSignal();

    void setTimeSignal(int number,int changeStatus);

    void ftpPutFileSignal(const QString &fileName, const QString &Path);

public slots:
    void changeLanguageSlot(int language);

private:
    void initConnect();

private:
    int diCount;
    int doCount;
    int siCount;
    int soCount;
    int aiCount;
    int aoCount;
    int grCount;
    int rCount;
    int prCount;
    int plCount;
    int timeCount;
    int gCount;

    bool diCountFlag;
    bool doCountFlag;
    bool siCountFlag;
    bool soCountFlag;
    bool aiCountFlag;
    bool aoCountFlag;
    bool grCountFlag;
    bool rCountFlag;
    bool prCountFlag;
    bool plCountFlag;
    bool timeCountFlag;
    bool gCountFlag;

    bool grChangeFlag;
    bool rChangeFlag;
    bool prChangeFlag;
    bool plChangeFlag;
    bool timeChangeFlag;
    bool gChangeFlag;
    //

    /**
     * @brief moveToPrFlag                      PR界面 点移动 标志
     */
//    bool moveToPrFlag;


private:

    /**
     * @brief communicateNormalDelegate     GSOAP通信接口对象
     */
    CommunicateNormalDelegate *communicateNormalDelegate;
    SystemStatus *systemStatus;
    GlobalData *ioData;
    GlobalData *globalPointData;
    MoveOperation *moveOperation;

    QTranslator translator;

};

#endif // SYSTEMSTATUSDELEGATE_H
